package com.java.base.exercise.iostream;

import com.java.base.exercise.designmode.builder.Person;
import org.apache.commons.compress.utils.IOUtils;
import org.apache.tomcat.util.http.fileupload.FileUtils;

import java.io.*;
import java.nio.channels.DatagramChannel;

/**
 * @Author RenPu
 * @Date 2022/1/4 19:03
 * @Version 1.0
 * @Description:
 *
 * 同步阻塞I/O模式，数据的读取写入必须阻塞在一个线程内等待其完成。这里假设一个烧开水的场景，有一排水壶在烧开水
 * BIO的工作模式就是， 叫一个线程停留在一个水壶那，直到这个水壶烧开，才去处理下一个水壶。
 * 但是实际上线程在等待水壶烧开的时间段什么都没有做。
 *
 *
 * 面向流 的 I/O 系统一次一个字节地处理数据。一个输入流产生一个字节的数据，一个输出流消费一个字节的数据。
 * 为流式数据创建过滤器非常容易。链接几个过滤器，以便每个过滤器只负责单个复杂处理机制的一部分，这样也是相对简单的。
 * 不利的一面是，面向流的 I/O 通常相当慢。
 *
 *
 **/
public class BIOTest {

    public static void main(String[] args) {

//        DatagramChannel datagramChannel = new DatagramChannel();


        //Initializes The Object
        Person user = new Person();
        user.setName("hollis");
        user.setAge(23);
        System.out.println(user);

        //Write Obj to File
        ObjectOutputStream oos = null;
        try {
            oos = new ObjectOutputStream(new FileOutputStream("tempFile"));
            oos.writeObject(user);
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            IOUtils.closeQuietly(oos);
        }





        //Read Obj from File
        File file = new File("tempFile");
        ObjectInputStream ois = null;
        try {
            ois = new ObjectInputStream(new FileInputStream(file));
            Person newUser = (Person) ois.readObject();
            System.out.println(newUser);
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } finally {
            IOUtils.closeQuietly(ois);
            try {
                FileUtils.forceDelete(file);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }



    }







}
